Общая информация
 

Все выражения AVISynth имеют вид:

variable_name = expression
expression
return expression
end

В первом случае, expression вычисляется и результат (который всегда видео-клип) присваивается variable_name. Во втором случае expression вычисляется и результат присваивается специальной переменной last. В третьем случае, expression вычисляется и используется как "return value" - возвращаемое значение скрипта, т.е. видео-клип, который увидит приложение открывшее этот AVS файл. Четвёртый вариант эквивалентен return last.

 

variable_name может быть до 50 символов длинной и содержать буквы, цифры, знак подчёркивания (_) и никаких иных. Имя не может начинаться с цифры.

 

expression может принимать следующие формы.

variable_name
Function(args)
expression.Function(args)
expression1 + expression2
expression1 ++ expression2

В первом случае, значение expression есть значение ранее установленной переменной variable_name. Во втором случае, значение есть возвращаемое значение некой функции (которая может быть неким методом формирующим видео-клип). Третий случай - альтернативная запись (Объектно Ориентированный стиль), эквивалентная Function(args, expression). Четвёртый и пятый варианты эквивалентны UnalignedSplice(expression1, expression2) и AlignedSplice(expression1, expression2) соответственно

 

Функции в скриптовом языке AVISynth это видео-фильтры либо методы модифицирующие (и формирующие) видео-клипы. Синтаксис вызовов показан в описаниях фильтров и методов. Функциям может передаваться до 60 аргументов (этого должно хватить), и возвращаемое значение всегда видео-клип. Функции всегда возвращают новый видео-клип, никогда не модифицирую существующий.

 

args - список аргументов функции разделённых запятыми. Список может быть пустым. Любой аргумент должен быть строкой текста, целым или с плавающей точкой числом или видео-клипом (это expression). Если функция ожидает видео-клип, как последний аргумент, и этот аргумент не указан, тогда в качестве опущенного аргумента используется специальная переменная last

 

Фильтры AVISynth могут принимать именованные аргументы. Именованные аргументы могут быть записаны в любом порядке и фильтр выберет значения по умолчанию для тех, что вы пропустите. В результате некоторые фильтры делаются значительно более лёгкими в применении. К примеру, вы можете теперь писать Subtitle("Hello, World!", text_color=$00FF00, x=100, y=200) вместо Subtitle("Hello, World!", 100, 200, 0, 999999, "Arial", 24, $00FF00).

 

Вызовы функций можно записывать без скобок, например FilterName arg1, arg2. Основной резон для этого - сохранение совместимости со старыми скриптами. Однако, иногда удобно не использовать скобки, когда нет возможности возникновения путаницы

 

Строка текста окружается либо "символами цитирования" либо ``в стиле TeX''. Строка текста может содержать любые символы кроме завершения, символа цитирования или двойных апострофов. Если вам надо использовать символ цитирования в строке, применяйте запись в стиле TeX. Как альтернативу, для преодоления данного ограничения можно использовать фигурные символы цитирования из Windows расширения ASCII таблицы

 

Целое число - строка цифр, с необязательным + или - в начале. Число с плавающей точкой - строка цифр с точкой где-то внутри и необязательным + или -. К примеру +1. воспринимается как число с плавающей точкой.

 

Также можно использовать шестнадцатеричные числа с префиксом $. Такие числа рассматриваются как целые. К примеру $FF8800 - оттенок оранжевого. Это тоже самое, что и запись используемая в HTML, за исключением того, что в HTML используется префикс #, а не $.

 

Любое выражение AVISynth должно занимать одну строку. Размещение более одного выражения в строке или разделение одного выражения на несколько строк не поддерживается.

 

AVISynth игнорирует любой текст следующий после символа # и до конца строки. Этот символ может быть использован для добавления в скрипт комментариев.

 

AVISynth игнорирует регистр: aViSouRCe применим также, как и AVISource.

 

Вы можете получить свойства клипа в AVS скрипте. К примеру, если переменная clip содержит видео-клип, то clip.height его высота, clip.framecount длина в кадрах и т.д. Вы можете работать с этими значениями используя все обычные арифметические и логические операторы (из C), и выполнять условный код с оператором ?: (к примеру clip = clip.IsRGB?clip.Subtitle("RGB"):clip.Subtitle("Not RGB")). Полный список свойств таков: width, height, framecount, framerate, audiorate, audiolength, audiochannels, audiobits, IsRGB, IsYUY2, IsFieldBased, IsFrameBased.

 

Вспомогательные системные функции: floor(f), ceil(f), round(f) (преобразование числа с плавающей точкой в целое); IsBool(var), IsInt(var), IsFloat(var), IsString(var), IsClip(var), Defined(var) (предикаты); Default(x,d) (возвращает x если Defined(x), в противном случае d); Eval(string) и Apply(func-string,arg,...), (Eval("f(x)") эквивалентно f(x) и Apply("f", x)); Import(filename) (вычисляет содержимое файла); Assert(bool-expr,error-message) для вывода сообщения об ошибке.

 

Вы можете определить и вызывать свои собственные функции в AVS скрипте, например так:

function NTSC2PAL(clip c) {
# Довольно хорошее преобразование NTSC->PAL. Была бы лучше с Smart Bob. :-)
    Assert(c.height == 480, "NTSC2PAL: input clip must have 480 scan lines")
    Bob(c, height=576)
    ChangeFPS(50)
    SeparateFields().SelectEvery(4,0,3)
    return Weave()
}
AVISource("ntsc.avi").NTSC2PAL()
        
      

Введение
[Введение]
AVISynth
[AVISynth]
Команды компактно
[Команды компактно]